Syntax10.Scn.Fnt Syntax10b.Scn.Fnt ParcElems Alloc MODULE HostSYS; (** RD 26-May-96*) IMPORT AmigaDos; CONST BigEndianMachine*=TRUE; (* 680x0 is big endian, i386 is little endian *) Array which maps a character in the Oberon character set into a character in the host character set. inverseMapping:ARRAY 256 OF CHAR; Array which maps a character in the host character set into a character in the Oberon character set. mapping:ARRAY 256 OF CHAR; PROCEDURE StdOut*(str: ARRAY OF CHAR; len: LONGINT); BEGIN IF AmigaDos.Write(AmigaDos.Output(),str,len)=1 THEN END END StdOut; PROCEDURE IsNameChar1*(ch:CHAR):BOOLEAN; (* Is ch valid for first character of a name name? *) BEGIN RETURN (('A'<=ch) & (ch<='Z')) OR (('a'<=ch) & (ch<='z')) OR (ch='.') OR (ch='/') END IsNameChar1; PROCEDURE IsNameChar*(ch:CHAR):BOOLEAN; (* Is ch valid for second to last character of a name? *) BEGIN RETURN (('A'<=ch) & (ch<='Z')) OR (('a'<=ch) & (ch<='z')) OR (('0'<=ch) & (ch<='9')) OR (ch='.') OR (ch='/') OR (ch=':') OR (ch='_') END IsNameChar; PROCEDURE toHost*(ch:CHAR):CHAR; (* Convert charcter from host char set to Oberon char set *) BEGIN RETURN inverseMapping[ORD(ch)] END toHost; PROCEDURE toOberon*(ch:CHAR):CHAR; (* Convert charcter from host char set to Oberon char set *) BEGIN RETURN mapping[ORD(ch)] END toOberon; PROCEDURE makeMapping(ch1,ch2:CHAR); ch:CHAR; BEGIN IF mapping[ORD(ch1)]#ch2 THEN (* other mappings caused this to be already ok. *) IF mapping[ORD(ch2)]#ch2 THEN (* was already substituted. Search for new location of ch2. *) ch:=mapping[ORD(ch2)]; WHILE mapping[ORD(ch)]#ch2 DO ch:=mapping[ORD(ch)] END; ch2:=ch END; mapping[ORD(ch2)]:=mapping[ORD(ch1)]; mapping[ORD(ch1)]:=ch2 END makeMapping; PROCEDURE initMapping; i:INTEGER; BEGIN FOR i:=0 TO 0FFH DO mapping[i]:=CHR(i) END END initMapping; PROCEDURE createInverseMapping; i:INTEGER; BEGIN FOR i:=0 TO 0FFH DO inverseMapping[ORD(mapping[i])]:=CHR(i) END createInverseMapping; BEGIN initMapping; makeMapping( 00DX,00AX); makeMapping( 0C4X," makeMapping( 0D6X," makeMapping( 0DCX," makeMapping( 0E4X," makeMapping( 0EBX," makeMapping( 0EFX," makeMapping( 0F6X," makeMapping( 0FCX," makeMapping( 0E2X," makeMapping( 0EAX," makeMapping( 0EEX," makeMapping( 0F4X," makeMapping( 0FBX," makeMapping( 0E0X," makeMapping( 0E8X," makeMapping( 0ECX," makeMapping( 0F2X," makeMapping( 0F9X," makeMapping( 0E1X," makeMapping( 0E9X," makeMapping( 0E7X," makeMapping( 0F1X," makeMapping( 0DFX," createInverseMapping END HostSYS. Date Author Modification 1996-08-11 degner@pallas.amp.uni-hannover.de Created first AMIGA version.